#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>
#include <QString>
#include <QSerialPortInfo>
#include <QMessageBox>
#include <QTimer>
#include <QPainter>


#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QFileDialog>


#include <windows.h>
#include <dwmapi.h>

#include <fftw3.h>
#include "qcustomplot.h"  // 必须包含 QCustomPlot 头文件

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QSerialPort *serialPort;//定义串口指针

    QVector<double> generateSignal(int length, double sampleRate);

private slots:

    /*手动连接槽函数*/
    void manual_serialPortReadyRead();

    /*以下为mainwindow.ui文件中点击“转到槽”自动生成的函数*/
    void on_openBt_clicked();

    void on_sendBt_clicked();

    // void on_clearBt_clicked();

    void on_btnClearSend_clicked();

    void on_chkTimSend_stateChanged(int arg1);

    // void on_btnSerialCheck_clicked();

    void on_chearBt_clicked();

    void on_chearBt_2_clicked();

    void on_chk_rev_line_stateChanged(int arg1);

    void on_Create_log_clicked();

    // void on_chk_rev_time_stateChanged(int arg1);

    void on_chk_rev_hex_stateChanged(int arg1);



    void restoreComboBoxSettings();
    bool eventFilter(QObject *obj, QEvent *event) override; // 添加这行声明


    // void on_pushButton_clicked();

    void on_DrawPlot_clicked();


    void on_OpenGL_bt_stateChanged(int arg1);

    void on_sendcmdBt_clicked();

    void on_LogYBox_stateChanged(int arg1);


    void on_autoDraw_stateChanged(int arg1);

    void on_DoFFTButton_clicked();

    void on_SentDW0BT_clicked();

    void on_SentDW1BT_clicked();

    void on_SentDW2BT_clicked();

    void on_SentDW3BT_clicked();

    void on_SentDW4BT_clicked();

    void on_SentDW5BT_clicked();

    void on_SentDW6BT_clicked();

    void on_SentDW7BT_clicked();

private:
    Ui::MainWindow *ui;

    // 发送、接收字节计数
    long sendNum, recvNum,old_recvNum;
    QString status;//串口连接状态
    QLabel *lblSendNum;
    QLabel *lblRecvNum;
    QLabel *lblPortState;
    void setNumOnLabel(QLabel *lbl, QString strS, long num);

    // int checkReadBuf(QByteArray ReadBuf);
    int checkReadBuf(const QByteArray &ReadBuf) ;

    void setupHexValidator();

    QString pausedDataBuffer;
    uint8_t do_line = 0;

    //log


    QFile logFile;                   // 日志文件对象
    bool isFileMode = false;         // 当前是否为文件模式
    QTimer updateTimer;              // 文件模式下刷新UI的定时器

    void updateFileView();           // 文件模式下更新显示
    void appendDirect(QString text); // 直接显示模式
    void onDataReceived(QString text);




    /**********画图相关qcustomplot****************/

    QCPItemStraightLine *hLine = nullptr;  // 水平十字线
    QCPItemStraightLine *vLine = nullptr;  // 垂直十字线
    QCPItemText *dataLabel = nullptr;  // 数据标签（可选）
    bool isMouseInPlot = false;
    void setupFFTCursor();
    void onFFTPlotMouseMove(QMouseEvent *event);
    double getAmplitudeAt(double freq);
    void updateCursorPosition();


    void Set_qCustomPlot_Dark(bool enabled);
    // // 定义颜色列表（支持最多16个波形）
    QVector<QColor> colors = {
        Qt::blue,
        Qt::red,
        Qt::green,
        Qt::cyan,
        Qt::magenta,
        Qt::yellow,
        Qt::darkBlue,
        Qt::darkRed,
        Qt::darkGreen,
        Qt::darkCyan,
        Qt::darkMagenta,
        Qt::darkYellow,
        Qt::gray,
        Qt::black,
        Qt::lightGray,
        Qt::darkGray
    };





};
#endif // MAINWINDOW_H

